package analizadorLexico.estados;

import analizadorLexico.tokens.Token;
import analizadorLexico.tokens.TokenResDeclaraciones;
import analizadorLexico.tokens.TokenResInstrucciones;
import analizadorLexico.tokens.TokenResPrograma;

public class Estado71 implements Estado{
/*aplico el patron singleton para cada estado*/
	
	/*INSTANCE lo que hace es guardar la instancia de la clase*/
	private static Estado71 INSTANCE = null;    
	private Estado71(){}
	
    private synchronized static void createInstance() {
        if (INSTANCE == null) INSTANCE = new Estado71();
    }
    
    public static Estado getInstance() {
        if (INSTANCE == null) createInstance();
        return INSTANCE;
    }

	public void irASiguienteEstado() {
		
		Contexto.setEstadoActual(EstadoInicial.getInstance());
		
		if(Contexto.getTablaSimbolos().esPalabraReservada(Contexto.getLexema().toString()))
		{
			if(Contexto.getLexema().toString().equals("programa:"))
			{
				Contexto.addToken((Token)new TokenResPrograma(Contexto.getLexema(),Contexto.getLineaActual(),Contexto.getPosicionLinea()-Contexto.getLexema().length()));
			}
			
			if(Contexto.getLexema().toString().equals("declaraciones:"))
			{
				Contexto.addToken((Token)new TokenResDeclaraciones(Contexto.getLexema(),Contexto.getLineaActual(),Contexto.getPosicionLinea()-Contexto.getLexema().length()));
			}
			
			if(Contexto.getLexema().toString().equals("instrucciones:"))
			{
				Contexto.addToken((Token)new TokenResInstrucciones(Contexto.getLexema(),Contexto.getLineaActual(),Contexto.getPosicionLinea()-Contexto.getLexema().length()));
			}
			
			Contexto.resetearLexema();
			
			return;
		}
		
		Contexto.generarErrorYReiniciar(Contexto.getLexema().toString(), "programa: , declaraciones: , intrucciones:");
	}
}
